/**
 * Producto.java 
 * Clase que respresenta a un producto sobre el que el proveedor.
 * puede publicar ofertas.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 */

package ocio.beans;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * Clase que respresenta a un producto sobre el que el proveedor .
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Oferta
 * @see ocio.beans.Proveedor 
 */
public class Producto implements Serializable {

	private static final long serialVersionUID = 1L;
	private int id;
	private String nombre;
	private int tipo; // 1,2,3 
	private String descripcion;
	private String direccion;
	private String telefono;
	private String municipio;
	private String foto;
	private Admin admin;
	private Proveedor proveedor;
	private Subtipo subtipo;
	private Provincia provincia;
	private Set<Oferta> ofertas = new HashSet<Oferta>(0);

	/**
	 * Constructor de Clase.	
	 */
	public Producto(){
	}
	
	 /**
	 * Método getter.         
	 * @return id Devuelve el identificador único en base de datos del producto.
	 */ 
	public int getId() {
		return id;
	}
	
	/**
	 * Método setter.         
	 * @param id Asigna al producto un identificador único para la base de datos.
	 */ 
	public void setId(int id) {
		this.id = id;
	}
	
	 /**
	 * Método getter.         
	 * @return nombre Devuelve el nombre del producto.
	 */ 
	public String getNombre() {
		return nombre;
	}
	
	/**
	 * Método setter.         
	 * @param nombre Establece el nombre del producto.
	 */ 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	 /**
	 * Método getter.         
	 * @return tipo Devuelve 1 para productos tipo Restaurante, 2 para tipo Espectáculos y 3 para tipo Actividades.
	 */ 
	public int getTipo() {
		return tipo;
	}
	
	/**
	 * Método setter.         
	 * @param tipo Establece el tipo de producto, 1 para Restaurante, 2 para Espectáculos y 3 para Actividades.
	 */ 
	public void setTipo(int tipo) {
		this.tipo = tipo;
	}
	
	 /**
	 * Método getter.         
	 * @return subtipo Devuelve el subtipo de producto, dentro de la clasificación establecida para cada tipo.
	 */ 
	public Subtipo getSubtipo() {
		return subtipo;
	}
	
	/**
	 * Método setter.         
	 * @param subtipo Establece el subtipo de producto, dentro de la clasificación establecida para cada tipo.
	 */ 
	public void setSubtipo(Subtipo subtipo) {
		this.subtipo = subtipo;
	}
	
	 /**
	 * Método getter.         
	 * @return descripcion Devuelve la descripción detallada del producto.
	 */ 
	public String getDescripcion() {
		return descripcion;
	}
	
	/**
	 * Método setter.         
	 * @param descripcion Establece la descripción detallada del producto.
	 */ 
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	
	 /**
	 * Método getter.         
	 * @return direccion Devuelve la dirección donde se ofrece el producto.
	 */ 
	public String getDireccion() {
		return direccion;
	}
	
	/**
	 * Método setter.         
	 * @param direccion Establece la dirección donde se ofrece el producto.
	 */ 
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	
	 /**
	 * Método getter.         
	 * @return telefono Devuelve el teléfono de contacto para obtener información del producto.
	 */ 
	public String getTelefono() {
		return telefono;
	}
	
	/**
	 * Método setter.         
	 * @param telefono Establece el teléfono de contacto para obtener información del producto.
	 */ 
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	
	 /**
	 * Método getter.         
	 * @return municipio Devuelve el municipio donde se ofrece el producto.
	 */ 
	public String getMunicipio() {
		return municipio;
	}
	
	/**
	 * Método setter.         
	 * @param municipio Establece el municipio donde se ofrece el producto.
	 */ 
	public void setMunicipio(String municipio) {
		this.municipio = municipio;
	}
	
	 /**
	 * Método getter.         
	 * @return ofertas Devuelve el conjunto de ofertas disponibles sobre ese producto.
	 */ 
	public Set<Oferta> getOfertas() {
		return ofertas;
	}
	
	/**
	 * Método setter.         
	 * @param ofertas Establece un conjunto de ofertas disponibles sobre un productos.
	 */ 
	public void setOfertas(Set<Oferta> ofertas) {
		this.ofertas = ofertas;
	}
	
	 /**
	 * Método getter.         
	 * @return provincia Devuelve la provincia donde se ofrece el producto.
	 */ 
	public Provincia getProvincia() {
		return provincia;
	}
	
	/**
	 * Método setter.         
	 * @param provincia Establece la provincia donde se ofrece el producto.
	 */ 
	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	 /**
	 * Método getter.         
	 * @return admin Devuelve el administrador cuando es este el que ha ofrecido el producto.
	 */ 
	public Admin getAdmin() {
		return admin;
	}

	/**
	 * Método setter.         
	 * @param admin Establece al administrador como el que ofrece el producto.
	 */ 
	public void setAdmin(Admin admin) {
		this.admin = admin;
	}

	 /**
	 * Método getter.         
	 * @return proveedor Devuelve el proveedor que ofrece el producto, siempre que no sea el administrador quien lo ofrece.
	 */ 
	public Proveedor getProveedor() {
		return proveedor;
	}

	/**
	 * Método setter.         
	 * @param proveedor Establece el proveedor que ofrece el producto, siempre que no sea el administrador quien lo ofrece.
	 */ 
	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	 /**
	 * Método getter.         
	 * @return foto Devuelve la ruta del fichero de imagen que contiene una fotografia asociada al producto.
	 */ 
	public String getFoto() {
		return foto;
	}

	/**
	 * Método setter.         
	 * @param foto Establece la ruta del fichero de imagen que contiene una fotografia asociada al producto.
	 */ 
	public void setFoto(String foto) {
		this.foto = foto;
	}
	


	
}
